/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador;

import Dao.DaoChofer;
import Dao.DaoFeriado;
import Dao.DaoMulta;
import Dao.DaoViaje;
import Modelo.DiasFeriados;
import Modelo.Listas;
import Modelo.Multa;
import Modelo.UnidadT;
import Modelo.Validaciones;
import Modelo.Viaje;
import Vista.JFrameMultas;
import Vista.Mensajes;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ControladorMultas implements ActionListener {

    private boolean Existe;
    private JFrameMultas formMultas;
    //private Listas list;

    public ControladorMultas() {
        //list = lis;
        formMultas = new JFrameMultas();
        formMultas.agregarListener(this);
        formMultas.setVisible(true);
        formMultas.setLocationRelativeTo(null);
        AsignarCodigoMulta();
        LlenarComboDiasF();
        Enabled(false);

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource().equals(formMultas.getCmbDiasFeriados())) {
            Enabled(true);
        }
        if (e.getSource().equals(formMultas.getBtnBuscar())) {
            new ControladorConsulMultas();
        }
        if (e.getSource().equals(formMultas.getBtnEliminar())) {
            Limpiar();
        }
        if (e.getSource().equals(formMultas.getBtnGuardar())) {
            Registrar();
        }
        if (e.getSource().equals(formMultas.getBtnSalir())) {
            formMultas.dispose();
        }
        if (e.getSource().equals(formMultas.getBtnViajeAleatorio())) {
            GenerarViajeAleatorio();
        }
    }

    private void LlenarComboDiasF() {
        try {
            formMultas.getCmbDiasFeriados().removeAllItems();
            DaoFeriado daoF = new DaoFeriado();
            ResultSet rs;
            rs = daoF.ConsultarFeriados();
            while(rs.next())
            {
                formMultas.getCmbDiasFeriados().addItem(rs.getString(1));
                //rs.next();
            }
            
            //formMultas.getCmbDiasFeriados().setSelectedIndex(-1);
        } catch (SQLException ex) {
            Logger.getLogger(ControladorMultas.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    private void GenerarViajeAleatorio() {
        
        try {
            if (formMultas.getCmbDiasFeriados().getSelectedIndex() == -1) {
                Mensajes.Aviso("Seleccione un dia Feriado", "");
                return;
            }   DaoViaje daoV = new DaoViaje();
            ResultSet rsCant,rsViaje;
            rsCant = daoV.CantViajesXDia(formMultas.getCmbDiasFeriados().getSelectedItem().toString());
            rsCant.next();
            int cant = rsCant.getShort(1);
            if(cant==0)
            {
                Mensajes.Aviso("No hay viajes registrados en este dia", null);
                Limpiar();
                Enabled(false);
                formMultas.getCmbDiasFeriados().requestFocusInWindow();
                return;
            }
            rsViaje = daoV.ConsultarViajeXDia(formMultas.getCmbDiasFeriados().getSelectedItem().toString());
            //LinkedList<Viaje> ViajesXDia = new LinkedList<Viaje>();
            String diaF = formMultas.getCmbDiasFeriados().getSelectedItem().toString();
            Date feriados;
            int AleaViaje = Validaciones.Generar_Aleatorio(Integer.parseInt(rsCant.getString(1)));
            for(int i=0;i<=AleaViaje;i++)
            {
                rsViaje.next();
            }
            
            /*Viaje viaje = ViajesXDia.get(AleaViaje);
            for (int j = 0; j < list.getListaUnidadT().size(); j++) {
                if (list.getListaUnidadT().get(j).getPlaca().equals(viaje.getPlacaVehiculo())) {
                    CISocio = list.getListaUnidadT().get(j).getCISocio();
                }
            }*/
            formMultas.getTxtCodViaje().setText(rsViaje.getString(1));
            formMultas.getTxtPlacaV().setText(rsViaje.getString(2));
            formMultas.getTxtCedChofer().setText(rsViaje.getString(4));
            formMultas.getTxtCedSocio().setText(rsViaje.getString(3));
            formMultas.getTxtCodCoop().setText(rsViaje.getString(5));
        } catch (SQLException ex) {
            Logger.getLogger(ControladorMultas.class.getName()).log(Level.SEVERE, null, ex);
        }

        }

    
    private void Registrar() {
        try {
            Multa multa = new Multa();
            String Cadena;
            String codViaje;
            SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
            DaoMulta daoMulta = new DaoMulta();
            ResultSet rs;
            
            if (formMultas.getCmbDiasFeriados().getSelectedIndex() == -1) {
                Mensajes.Aviso("Seleccione un dia feriado", "");
                formMultas.getCmbDiasFeriados().requestFocusInWindow();
                Enabled(false);
                return;
            }
            
            Cadena = formMultas.getTxtCodViaje().getText();
            if (Cadena.length() == 0) {
                Mensajes.Aviso("Seleccione un viaje", "");
                formMultas.getBtnViajeAleatorio().requestFocusInWindow();
                return;
            }
            
            codViaje = formMultas.getTxtCodViaje().getText();
            rs= daoMulta.BuscarMultaporViaje(codViaje);
            if (rs.next()) {
                Mensajes.Aviso("Este Vehículo ya fue multado en este Viaje", "");
                Limpiar();
                Enabled(false);
                formMultas.getCmbDiasFeriados().requestFocusInWindow();
                return;
            }
            String fecha=formMultas.getCmbDiasFeriados().getSelectedItem().toString();
            
            multa.Multa(formMultas.getLblCodMulta().getText(),
                    formMultas.getTxtCodViaje().getText(),
                    Validaciones.CnvStringFecha2(fecha),
                    formMultas.getTxtPlacaV().getText(),
                    formMultas.getTxtCodCoop().getText(),
                    formMultas.getTxtCedChofer().getText(),
                    formMultas.getTxtCedSocio().getText());
            
            
                daoMulta.IncluirMulta(multa);
           
            
            Mensajes.Aviso("Multa agregada con exito", "");
            Limpiar();
            Enabled(false);
            formMultas.getCmbDiasFeriados().requestFocusInWindow();
            AsignarCodigoMulta();
        } catch (SQLException ex) {
            Logger.getLogger(ControladorMultas.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    private void AsignarCodigoMulta() {
        try {
            DaoMulta daoM = new DaoMulta();
            ResultSet rs;
            rs = daoM.CantidadMultas();
            rs.next();
            int nroM = Integer.parseInt(rs.getString(1));
            nroM++;
            formMultas.getLblCodMulta().setText("M000" + nroM);
        } catch (SQLException ex) {
            Logger.getLogger(ControladorMultas.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private void Limpiar() {
        formMultas.getCmbDiasFeriados().setSelectedIndex(-1);
        formMultas.getTxtCodViaje().setText("");
        formMultas.getTxtPlacaV().setText("");
        formMultas.getTxtCedChofer().setText("");
        formMultas.getTxtCedSocio().setText("");
        formMultas.getTxtCodCoop().setText("");
        Enabled(false);
    }

    private void Enabled(boolean Status) {
        formMultas.getCmbDiasFeriados().setEnabled(!Status);
        formMultas.getBtnViajeAleatorio().setEnabled(Status);
    }
}
